/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package validadores.api;

import java.util.ArrayList;
import java.util.List;
import validadores.ValidadorComponent;

/**
 * Esta clase permite agrupar varios <b>ValidadorComponent</b><br>
 * Con el fin de realizar las validaciones de cada validador<br>
 * el metodo validar de esta clase determina si es valido si y solo si
 * todos los ValidadorComponent que se han agregado al grupo son validos
 * @author Steve
 */
public class GrupoValidador {
    /**
     * Listado de los ValidadorComponent de este grupo de validacion
     */
    List<validadores.ValidadorComponent> validadores;
    /**
     * propiedad que determina si el grupo es valido o no
     */
    boolean valido;

    /**
     * Constructor de la clase
     */
    public GrupoValidador() {
        validadores = new ArrayList<ValidadorComponent>();
    }

    /**
     * Agrega un ValidadorComponent al grupo
     * @param validador
     */
    public void add(ValidadorComponent validador) {
        validadores.add(validador);
    }

    /**
     * Este metodo permite añadir mas de un validador a la vez
     * @param validador listado de ValidadorComponent separados por comas
     */
    public void add(ValidadorComponent... validador) {
        for (int i = 0; i < validador.length; i++) {
            validadores.add(validador[i]);
        }
    }

    /**
     * Quita un ValidadorComponent del grupo
     * @param validador ValidadorComponent a quitar
     */
    public void remove(ValidadorComponent validador) {
        validadores.remove(validador);
    }

    /**
     * Obtiene el listado de ValidadorComponent que pertenecen al grupo
     * @return
     */
    public List<ValidadorComponent> getValidadores() {
        return validadores;
    }

    /**
     * Establece un listado de ValidadorComponent
     * @param validadores
     */
    public void setValidadores(List<ValidadorComponent> validadores) {
        this.validadores = validadores;
    }

    /**
     * Determina si el grupo de validacion es valido
     * @return true si es valido, false si no
     */
    public boolean isValido() {
        return valido;
    }

    /**
     * Establece si el grupo de validacion es valido o no
     * @param valido true si es valido, false si no
     */
    public void setValido(boolean valido) {
        this.valido = valido;
    }

    /**
     * Valida cada uno de los ValidadorComponent que se han agregado
     * al grupo de validacion
     * @return true si cada uno de los ValidadorComponent agregado
     * es valido, false si no
     */
    public boolean validar() {
        setValido(true);
        for (ValidadorComponent validador : validadores) {
            setValido(validador.validar() && isValido());
        }
        return isValido();
    }
}
